package br.com.acs.CameraIP.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity  
public class Camera implements Serializable{

	public Camera() {
	   }
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((ativo == null) ? 0 : ativo.hashCode());
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result
				+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
		result = prime * result + ((dirFtp == null) ? 0 : dirFtp.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((idCliente == null) ? 0 : idCliente.hashCode());
		result = prime * result + ((modelo == null) ? 0 : modelo.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((senhaCam == null) ? 0 : senhaCam.hashCode());
		result = prime * result
				+ ((senhaFtp == null) ? 0 : senhaFtp.hashCode());
		result = prime * result + ((urlCam == null) ? 0 : urlCam.hashCode());
		result = prime * result
				+ ((urlVideo == null) ? 0 : urlVideo.hashCode());
		result = prime * result
				+ ((usuarioCam == null) ? 0 : usuarioCam.hashCode());
		result = prime * result
				+ ((usuarioFtp == null) ? 0 : usuarioFtp.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Camera other = (Camera) obj;
		if (ativo == null) {
			if (other.ativo != null)
				return false;
		} else if (!ativo.equals(other.ativo))
			return false;
		if (cliente == null) {
			if (other.cliente != null)
				return false;
		} else if (!cliente.equals(other.cliente))
			return false;
		if (dataCadastro == null) {
			if (other.dataCadastro != null)
				return false;
		} else if (!dataCadastro.equals(other.dataCadastro))
			return false;
		if (dirFtp == null) {
			if (other.dirFtp != null)
				return false;
		} else if (!dirFtp.equals(other.dirFtp))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (idCliente == null) {
			if (other.idCliente != null)
				return false;
		} else if (!idCliente.equals(other.idCliente))
			return false;
		if (modelo == null) {
			if (other.modelo != null)
				return false;
		} else if (!modelo.equals(other.modelo))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (senhaCam == null) {
			if (other.senhaCam != null)
				return false;
		} else if (!senhaCam.equals(other.senhaCam))
			return false;
		if (senhaFtp == null) {
			if (other.senhaFtp != null)
				return false;
		} else if (!senhaFtp.equals(other.senhaFtp))
			return false;
		if (urlCam == null) {
			if (other.urlCam != null)
				return false;
		} else if (!urlCam.equals(other.urlCam))
			return false;
		if (urlVideo == null) {
			if (other.urlVideo != null)
				return false;
		} else if (!urlVideo.equals(other.urlVideo))
			return false;
		if (usuarioCam == null) {
			if (other.usuarioCam != null)
				return false;
		} else if (!usuarioCam.equals(other.usuarioCam))
			return false;
		if (usuarioFtp == null) {
			if (other.usuarioFtp != null)
				return false;
		} else if (!usuarioFtp.equals(other.usuarioFtp))
			return false;
		return true;
	}

	public Camera(Long id, String nome, String modelo, String dirFtp, String urlVideo,
			String usuarioCam, String senhaCam, String urlCam,
			String usuarioFtp, String senhaFtp, Long idCliente,
			Date dataCadastro, Boolean ativo, Cliente cliente) {
		super();
		this.id = id;
		this.ativo = ativo;
		this.dataCadastro = dataCadastro;
		this.dirFtp = dirFtp;
		this.idCliente = idCliente;
		this.nome = nome;
		this.senhaCam = senhaCam;
		this.senhaFtp = senhaFtp;
		this.urlVideo = urlVideo;
		this.usuarioCam = usuarioCam;
		this.usuarioFtp = usuarioFtp;
		this.urlCam = urlCam;
		this.modelo = modelo;
		this.cliente = cliente;
	}

	private static final long serialVersionUID = 1L;

	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id")
    private Long id;  
    private String nome;
    private String modelo;
    private String urlVideo;
    private String usuarioCam;
    private String senhaCam;
    private String urlCam;
    private String usuarioFtp;
    private String senhaFtp;   

    private Long idCliente;  
    private Date dataCadastro;
	private Boolean ativo;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="idCliente", insertable=false, updatable=false)

	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.PERSIST)	
	private Cliente cliente;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public String getUrlVideo() {
		return urlVideo;
	}

	public void setUrlVideo(String urlVideo) {
		this.urlVideo = urlVideo;
	}

	public String getUsuarioCam() {
		return usuarioCam;
	}

	public void setUsuarioCam(String usuarioCam) {
		this.usuarioCam = usuarioCam;
	}

	public String getSenhaCam() {
		return senhaCam;
	}

	public void setSenhaCam(String senhaCam) {
		this.senhaCam = senhaCam;
	}

	public String getUrlCam() {
		return urlCam;
	}

	public void setUrlCam(String urlCam) {
		this.urlCam = urlCam;
	}

	public String getUsuarioFtp() {
		return usuarioFtp;
	}

	public void setUsuarioFtp(String usuarioFtp) {
		this.usuarioFtp = usuarioFtp;
	}

	public String getSenhaFtp() {
		return senhaFtp;
	}

	public void setSenhaFtp(String senhaFtp) {
		this.senhaFtp = senhaFtp;
	}

	public Long getIdCliente() {
		return idCliente;
	}

	public void setIdCliente(Long idCliente) {
		this.idCliente = idCliente;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	private String dirFtp;

	public String getDirFtp() {
		return dirFtp;
	}

	public void setDirFtp(String dirFtp) {
		this.dirFtp = dirFtp;
	}
}
